using System;
using System.Collections;
using Algorithms.Graph;

namespace Graph.Sparse
{

	public interface IMatrixGraph : IGraph
	{
		IList GetEdges(int vertexIndex);
	}

	public class MatrixGraph : IMatrixGraph
	{
		protected string name;

		protected IList vertices;

		protected IList edges;

		protected IVertex[,] matrix;

		public MatrixGraph(int size)
		{
			matrix = new IVertex[size, size];
		}

		IList GetEdges(int vertexIndex)
		{
			return null;
		}

		#region IGraph Members

		public string Name
		{
			get
			{
				return name;
			}
			set
			{
				name = value;
			}
		}

		public IList GetVertices()
		{
			return vertices;
		}

		public IList GetEdges()
		{
			return edges;
		}

		public int GetNumberOfVertices()
		{
			// TODO:  Add SparseGraph.GetNumberOfVertices implementation
			return 0;
		}

		public int GetNumberOfEdges()
		{
			// TODO:  Add SparseGraph.GetNumberOfEdges implementation
			return 0;
		}

		public IVertex GetVertex(int vertexIndex)
		{
			// TODO:  Add SparseGraph.GetVertex implementation
			return null;
		}

		public IEdge GetEdge(IVertex end1, IVertex end2)
		{
			// TODO:  Add SparseGraph.GetEdge implementation
			return null;
		}

		public void AddEdge(int i, int j, object weight)
		{
			// TODO:  Add SparseGraph.AddEdge implementation
		}

		#endregion

	}

	public class SparseGraph : IGraph
	{
		protected string name;

		protected IDictionary map;

		#region IGraph Members

		public string Name
		{
			get
			{
				return name;
			}
			set
			{
				name = value;
			}
		}

		public IList GetVertices()
		{
			// TODO:  Add SparseGraph.GetVertices implementation
			return null;
		}

		public IList GetEdges()
		{
			// TODO:  Add SparseGraph.GetEdges implementation
			return null;
		}

		public int GetNumberOfVertices()
		{
			// TODO:  Add SparseGraph.GetNumberOfVertices implementation
			return 0;
		}

		public int GetNumberOfEdges()
		{
			// TODO:  Add SparseGraph.GetNumberOfEdges implementation
			return 0;
		}

		public IVertex GetVertex(int vertexIndex)
		{
			// TODO:  Add SparseGraph.GetVertex implementation
			return null;
		}

		public IEdge GetEdge(IVertex end1, IVertex end2)
		{
			// TODO:  Add SparseGraph.GetEdge implementation
			return null;
		}

		public void AddEdge(int i, int j, object weight)
		{
			// TODO:  Add SparseGraph.AddEdge implementation
		}

		#endregion

	}

	public class SparseGraphVertex : AbstractVertex
	{
		#region IVertex Members

		public IList GetEdges()
		{
			// TODO:  Add SparseGraphVertex.GetEdges implementation
			return null;
		}

		public IEdge AddEdge(IEdge edge)
		{
			// TODO:  Add SparseGraphVertex.AddEdge implementation
			return null;
		}

		IEdge Algorithms.Graph.IVertex.AddEdge(IVertex vertex)
		{
			// TODO:  Add SparseGraphVertex.Algorithms.Graph.IVertex.AddEdge implementation
			return null;
		}

		IEdge Algorithms.Graph.IVertex.AddEdge(IVertex vertex, object weight)
		{
			// TODO:  Add SparseGraphVertex.Algorithms.Graph.IVertex.AddEdge implementation
			return null;
		}

		public IList GetLinkedVertices()
		{
			// TODO:  Add SparseGraphVertex.GetLinkedVertices implementation
			return null;
		}

		public bool IsLinkedWith(IEdge edge)
		{
			// TODO:  Add SparseGraphVertex.IsLinkedWith implementation
			return false;
		}

		bool Algorithms.Graph.IVertex.IsLinkedWith(IVertex v)
		{
			// TODO:  Add SparseGraphVertex.Algorithms.Graph.IVertex.IsLinkedWith implementation
			return false;
		}

		public int GetNumberOfEdges()
		{
			// TODO:  Add SparseGraphVertex.GetNumberOfEdges implementation
			return 0;
		}

		#endregion

	}
}